ﺗﻌﺮﻳﻒ ﻣﺘﺪھﺎ در ﺳﻲ ﺷﺎرپ
در اﻳﻦ ﻗﺴﻤﺖ ﺑﻪ ﻳﻜﻲ از ﻣﮫﻤﺘﺮﻳﻦ ﻣﺒﺎﺣﺚ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﺳﻲ ﺷﺎرپ ﻣﻲ رﺳﯿﻢ.
ﻣﺘﺪھﺎ در ﺳﻲ ﺷﺎرپ و ﻳﺎ ھﻤﺎن ﺗﻮاﺑﻊ در زﺑﺎن ، Cاﻋﻀﺎی ﻳﻚ ﺷﻲء ﻳﺎ ﻛﻼس ھﺴﺘﻨﺪ و ﻣﺠﻤﻮﻋﻪ ای از ﻳﻚ ﺳـﺮی از ﻛﺎرھﺎ را اﻧﺠﺎم ﻣﻲ دھﻨﺪ. ﻓﺮض ﻛﻨﯿﺪ در ﺑﺮﻧﺎﻣﻪ ی ﺷﻤﺎ ، ﻗﺴﻤﺘﻲ ﺑﺎﻳﺪ ﻳﻚ ﻋﻤﻠﯿﺎت رﻳﺎﺿﻲ ﺧـﺎص را اﻧﺠـﺎم دھـﺪ و اﻳﻦ ﻗﺴﻤﺖ از ﻛﺪ ﻛﻪ ﺷـﺎﻣﻞ ﭼﻨـﺪﻳﻦ ﺧـﻂ ﻧﯿـﺰ ﻣـﻲ ﮔـﺮدد ﺑﺎﻳـﺪ ﺑﺎرھـﺎ و ﺑﺎرھـﺎ در ﺑﺮﻧﺎﻣـﻪ ﺻـﺪا زده ﺷـﻮد. ﺑـﺮای ﻧﻈـﻢ ﺑﺨﺸﯿﺪن ﺑﻪ ﺑﺮﻧﺎﻣﻪ ، آﻧﮫﺎ را ﻣﻲ ﺗﻮان ﺑﻪ ﺻﻮرت ﺗﻮاﺑﻊ ﺑﺴﺘﻪ ﺑﻨﺪی ﻛﺮد و ﺑﺠﺎی ﻧﻮﺷﺘﻦ ﭼﻨﺪﻳﻦ ﺧﻂ ﺗﻜـﺮاری، ﻓﻘـﻂ ﻧـﺎم اﻳﻦ ﺑﺴﺘﻪ ( ﺗﺎﺑﻊ ) و ﭘﺎراﻣﺘﺮھﺎی آن را ﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮد.
در ﺳﻲ ﺷﺎرپ ﻳﻚ ﺗﺎﺑﻊ ﺑﻪ ﺻﻮرت زﻳﺮ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮد :
(ﻧﻮع و اﺳﺎﻣﻲ ﭘﺎراﻣﺘﺮھﺎ) ﻧﺎم ﺗﺎﺑﻊ ﻧﻮع ﺧﺮوﺟﻲ ﺗﺎﺑﻊ ﺳﻄﺢ دﺳﺘﺮﺳﻲ ﺑﻪ ﺗﺎﺑﻊ
}
ﺑﺪﻧﻪ ی ﺗﺎﺑﻊ
{
ﺑﺮای ﺗﻌﺮﻳﻒ ﻳﻚ ﻣﺘﺪ ﻳﺎ ﺗﺎﺑﻊ اﺑﺘﺪا ﺳﻄﺢ دﺳﺘﺮﺳﻲ ﺑﻪ آن ﻣﺎﻧﻨﺪ publicو private ﺳﭙﺲ ﻧﻮع ﺧﺮوﺟـﻲ ﺗـﺎﺑﻊ ﻣﺎﻧﻨـﺪ Void
) ھﯿﭽﻲ ) ذﻛﺮ ﻣﻲ ﮔﺮدد ﻛﻪ داﺧﻞ اﻳﻦ ﭘﺮاﻧﺘﺰھﺎ ﻣﻲ ﺗﻮان ورودی ھﺎی ﺗـﺎﺑﻊ ﻳـﺎ ﺑﻘـﻮﻟﻲ آرﮔﻮﻣـﺎن ھـﺎی ورودی را ﻣﻌﺮﻓﻲ ﻛﺮد. ﺳﭙﺲ ﺗﺎﺑﻊ ﺑﺎﻳﺪ ﺑﺎ { ﺷﺮوع و ﺑﺎ ﻳﻚ } ﺧﺎﺗﻤﻪ ﻳﺎﺑﺪ.
ﺑﺮای ﻣﺜﺎل :
( public int myFunc( int x
}
.…...
{
ھﺮ ﺗﺎﺑﻌﻲ ﻣﻲ ﺗﻮاﻧﺪ ﺻـﻔﺮ یا ﺗﻌـﺪاد ﺑﯿـﺸﻤﺎری آرﮔﻮﻣـﺎن ورودی و ﺻـﻔﺮ یا ﺗﻌـﺪاد ﺑﯿـﺸﻤﺎری ﺧﺮوﺟـﻲ داﺷـﺘﻪ ﺑﺎﺷـﺪ. ﺑﻮﺳﯿﻠﻪ ﻳﻚ ﺗﺎﺑﻊ ﻣﻲ ﺗﻮان ﭘﯿﭽﯿﺪﮔﻲ ﻛﺎر را ﻣﺨﻔﻲ ﻛﺮد و ﺻﺮﻓﺎ ﺑﺎ ﺻﺪا زدن ﻧﺎم آن ، ﻳﻚ ﺳﺮی از ﻋﻤﻠﯿﺎت را اﻧﺠـﺎم داد. ﮔﺎھﻲ از اوﻗﺎت ﻻزم ﻣﻲ ﺷﻮد دو ﻳﺎ ﭼﻨﺪ ﺗﺎﺑﻊ ﺑﺎ ﻳﻚ ﻧﺎم داﺷﺘﻪ ﺑﺎﺷﯿﻢ ﺑﻄﻮرﻳﻜﻪ ﭘﺎراﻣﺘﺮھﺎی ورودی ﻳﺎ ﻣﻘﺎدﻳﺮ ﺧﺮوﺟـﻲ و ﻳﺎ ﻧﻮع آرﮔﻮﻣﺎن ھﺎی ورودی آﻧﮫﺎ ﺑﺎ ھﻢ ﻣﺘﻔﺎوت ﺑﺎﺷﺪ ﺑﻪ اﻳﻦ ﻛﺎر overloading ﻣﻲ ﮔﻮﻳﻨﺪ.
ﺑﺴﯿﺎری از ﻛﻼس ھﺎی دات ﻧـﺖ ﻓـﺮﻳﻢ ورک ﻣﺘـﺪھﺎ و ﻳـﺎ ﺗﻮاﺑـﻊ ﻣﻔﯿـﺪ ﺣﺎﺿـﺮ و آﻣـﺎده ای را دارﻧـﺪ. ﺑـﺮای ﻣﺜـﺎل ﻛـﻼس
، DateTimeﻣﺘﺪی ﺑﻪ ﻧﺎم ToLongDatastring دارد ﻛﻪ ﺗﺎرﻳﺦ را ﺑﻪ ﺻﻮرت ﻳﻚ رﺷﺘﻪ ﻃﻮﻻﻧﻲ ﺑﺮ ﻣﻲ ﮔﺮداﻧﺪ.
ﺗﻮاﺑﻊ : void
ﺗﻮاﺑﻌﻲ ﻛﻪ ﺑﺎ ﻧﻮع void ﻣﻌﺮﻓﻲ ﻣﻲ ﺷﻮﻧﺪ ھﯿﭻ ﺧﺮوﺟﻲ ﻧﺪارﻧﺪ و در زﺑﺎن وﻳﮋوال ﺑﯿﺴﯿﻚ ﺑـﻪ آْﻧﮫـﺎ subو در دﻟﻔـﻲ ﺑـﻪ آﻧﮫﺎ procedure ﻣﻲ ﮔﻮﻳﻨﺪ.
ﺑﺎزﮔﺮداﻧﺪن ﻳﻚ ﻣﻘﺪار از ﻳﻚ ﺗﺎﺑﻊ :
ﭘﺲ از اﻳﻨﻜـﻪ ﻋﻤﻠﯿـﺎت ﻳـﻚ ﻣﺠﻤﻮﻋـﻪ از ﻛـﺪھﺎ درون ﺗـﺎﺑﻊ ﺑـﻪ ﭘﺎﻳـﺎن رﺳـﯿﺪ ﺑـﺎ اﺳـﺘﻔﺎده از ﻛﻠﻤـﻪ ی return ﻣـﻲ ﺗـﻮان
ﺧﺮوﺟﻲ ﺗﺎﺑﻊ را ﻣﻌﺮﻓﻲ ﻛﺮد. ﻻزم ﺑﻪ ذﻛﺮ اﺳﺖ ، ھﺮﺟﺎﻳﻲ اﻳﻦ ﻛﻠﻤﻪ ی returnذﻛﺮ ﺷﻮد ﻛﺎر ﺗﺎﺑﻊ ﺧﺎﺗﻤﻪ ﻣﻲ ﻳﺎﺑﺪ.
ﮫﺘﺮ اﺳﺖ ﻣﻮارد ﻓﻮق را ﺑﺎ ﭼﻨﺪ ﻣﺜﺎل ﻣﺮور ﻛﻨﯿﻢ :
ﻣﺜﺎل : ﻳﻚ ﺑﺮﻧﺎﻣﻪ ی ﺳﻲ ﺷﺎرپ ﺟﺪﻳﺪ consoleرا در VS.NETﺑـﺎز ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا دراﺑﺘـﺪا ۳۱ exاﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ. در اﻳﻨﺠﺎ ﻣﻲ ﺧﻮاھﯿﻢ ﺗﺎﺑﻌﻲ را ﺗﻌﺮﻳﻒ ﻛﻨﯿﻢ ﻛﻪ ﺳﻪ ﺑﺮاﺑﺮ ﺟﺬر ﻳﻚ ﻋﺪد را ﺑﺮ ﻣﻲ ﮔﺮداﻧﺪ.
;using System
namespace ex۱۳
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;( (۳)Console.WriteLine( int۳SQL
;()Console.ReadLine
{
( public static double int۳SQL( double intInput
}
;۰=double i
;( i = Math.Sqrt( intInput
;return i
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- از ﺷﻲء Math در ﺳﻲ ﺷﺎرپ ﻣﻲ ﺗﻮان ﺑﺮای اﻧﺠﺎم ﻳﻚ ﺳﺮی ﻋﻤﻠﯿـﺎت رﻳﺎﺿـﻲ اﺑﺘـﺪاﻳﻲ اﺳـﺘﻔﺎده ﻛـﺮد. در اﻳﻨﺠﺎ از ﻣﺘﺪ ﺟﺬر ﮔﺮﻓﺘﻦ آن اﺳﺘﻔﺎده ﺷﺪه اﺳﺖ.
٢- در ﺗﻌﺮﻳﻒ ﺗﺎﺑﻊ ﺧﻮدﻣﺎن از ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی staticاﺳﺘﻔﺎده ﺷﺪه اﺳﺖ. درون ﺗﺎﺑﻊ Mainﻧ ﻤﻲ ﺗﻮان ﺗﻮاﺑـﻊ ﻏﯿﺮ اﺳﺘﺎﺗﯿﻚ را ﻓﺮاﺧﻮاﻧﻲ ﻛﺮد. ﻓﻌﻼ اﻳﻦ ﻧﻜﺘﻪ را ﺑﺨﺎﻃﺮ را داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﺗﺎ در ﻣﻘﺎﻻت ﺑﻌﺪی ﺑﯿﺸﺘﺮ راﺟـﻊ ﺑـﻪ آن ﺻﺤﺒﺖ ﺷﻮد.
- ﺑﺪ ﻧﯿﺴﺖ ﺗﺎﺑﻊ ﺗﻌﺮﻳﻒ ﺷﺪه را ﻛﻤﻲ ﺑﯿﺸﺘﺮ آﻧﺎﻟﯿﺰ ﻛﻨﯿﻢ :
( public static double int۳SQL( double intInput
}
;۰=double i
;( i = Math.Sqrt( intInput
;return i
{
اﺑﺘـﺪا ﺳـﻄﺢ دﺳﺘﺮﺳـﻲ ﺑـﻪ ﺗـﺎﺑﻊ ذﻛـﺮ ﺷـﺪه اﺳـﺖ. ﭘﺎﺑﻠﯿـﻚ ، ﻳﻌﻨـﻲ اﻳـﻦ ﺗـﺎﺑﻊ ﺧـﺎرج از ﻛـﻼس ﻳـﻚ ﺑﺮﻧﺎﻣـﻪ ﻧﯿـﺰ ﻗﺎﺑـﻞ دﺳﺘﺮﺳﻲ اﺳﺖ. ﺳﭙﺲ از ﻛﻠﻤﻪ ی staticاﺳﺘﻔﺎده ﮔﺮدﻳﺪه ﻛﻪ ﺗﻮﺿﯿﺢ ﻣﺨﺘـﺼﺮی را در ﻣـﻮرد آن ﻣﻼﺣﻈـﻪ ﻛﺮدﻳـﺪ. در اداﻣﻪ ﻧﻮع ﺧﺮوﺟﻲ ﺗﺎﺑﻊ ﻛﻪ در اﻳﻨﺠﺎ doubleﻣﻲ ﺑﺎﺷﺪ ﻣﻌﺮﻓﻲ ﮔﺮدﻳﺪه اﺳﺖ. دﻗﺖ ﻛﻨﯿـﺪ ﻛـﻪ ﺣﺘﻤـﺎ ﺑﺎﻳـﺪ ﻧـﻮع ﺗﻌﺮﻳـﻒ ﺷﺪه ﺑﺎ ﻣﻘﺪاری ﻛﻪ ﻳﻚ ﺗﺎﺑﻊ ﺑﺮ ﻣﻲ ﮔﺮداﻧﺪ ﻳﻜﺴﺎن ﺑﺎﺷﺪ و ﮔﺮﻧﻪ ﺑﺎ ﻳﻚ ﺧﻄﺎ ﺑﺮﻧﺎﻣﻪ ﻣﺘﻮﻗﻒ ﻣﻲ ﺷﻮد. ﺳﭙﺲ ﻧﺎم ﺗـﺎﺑﻊ ﺗﻌﺮﻳﻒ ﺷﺪه اﺳﺖ. داﺧﻞ ﭘﺮاﻧﺘﺰ ھﺎ ﻧﻮع و ﻧﺎم آرﮔﻮﻣﺎﻧﻲ اراﺋﻪ ﺷﺪه اﺳﺖ ﻛﻪ در ﺑﺪﻧﻪ ی ﺗﺎﺑﻊ اﺳﺘﻔﺎده ﻣﻲ ﮔـﺮدد. اﮔـﺮ ﺑﻪ ﺗﻌﺪاد ﺑﯿﺸﺘﺮی ﭘﺎراﻣﺘﺮ و ﻳﺎ آرﮔﻮﻣﺎن ﻧﯿﺎز ﺑﻮد ﻣﻲ ﺗﻮان آﻧﮫﺎ را ﺑﺎ , از ھﻢ ﺟﺪا ﻛﺮد.
ﭘﺲ از اﻳﻨﻜﻪ ﻋﻤﻠﯿﺎت ﺗﺎﺑﻊ ﺧﺎﺗﻤﻪ ﻣﻲ ﻳﺎﺑﺪ ﺑﺎ اﺳﺘﻔﺎده از returnاﻳﻦ ﺧﺮوﺟﻲ را ﻣﻌﺮﻓﻲ ﻣﻲ ﻧﻤﺎﻳﯿﻢ. ﺑﺮای اﺳﺘﻔﺎده از اﻳﻦ ﺗﺎﺑﻊ ﺑﻪ ﺳﺎدﮔﻲ ﻧﺎم ﺗﺎﺑﻊ و ﺳﭙﺲ ﭘﺮاﻧﺘﺰھﺎ ﺑﻪ ھﻤﺮاه ﻳﻚ ﻋﺪد دﻟﺨﻮاه را ﻣـﻲ ﻧﻮﻳـﺴﻢ ﻛـﻪ آﻧـﺮا در ﻣﺘﺪ Mainﺑﺮﻧﺎﻣﻪ ﻣﻲ ﺗﻮان ﻣﺸﺎھﺪه ﻛﺮد.
ﺗﻌﺮﻳﻒ ﺗﻮاﺑﻊ در ﻛﻼس ھﺎی دﻳﮕﺮ ﺑﺮﻧﺎﻣﻪ و ﻧﺤﻮه ی اﺳﺘﻔﺎده از آﻧﮫﺎ :
ﻳﻜﻲ از زﻳﺒﺎﻳﻲ ھﺎی ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﺷﻲء ﮔﺮا ﻧﻈﻢ و ﺗﺮﺗﯿﺐ و ﺑﺴﺘﻪ ﺑﻨﺪی ﻛﺎرھﺎ ﻣﻲ ﺑﺎﺷﺪ ﻛﻪ اﺻﻄﻼﺣﺎ در اﻳﻨﺠﺎ ﺑـﻪ آن encapsulation ﻣﻲ ﮔﻮﻳﻨﺪ. ﻳﻌﻨﻲ ﻣﺎ ﻳﻚ ﺳﺮی از ﺗﻮاﺑﻊ و ﺧﻮاص را درون ﻛﭙﺴﻮﻟﻲ ﺑﻪ ﻧﺎم ﻛـﻼس ﻗـﺮار ﻣـﻲ دھـﯿﻢ ﺗﺎ ﺑﻪ ﺳﺎدﮔﻲ ﺑﺎرھﺎ و ﺑﺎرھﺎ از آن اﺳﺘﻔﺎده ﻧﻤﺎﻳﯿﻢ.
ﺑﺮای اﻳﻨﻜﺎر ﺑﻪ ﺳﺎدﮔﻲ ﻳﻚ ﺗﻮاﺑﻊ را ﺑﻪ ﺻﻮرت ﻣﻌﻤﻮل درون ﻛﻼس ﺗﻌﺮﻳﻒ ﻣﻲ ﻧﻤﺎﻳﯿﻢ و ﺳـﭙﺲ ھﻤﺎﻧﻨـﺪ ﺧـﻮاص ﻛـﻪ در ﻣﻮرد آﻧﮫﺎ ﺻﺤﺒﺖ ﺷﺪ ، از ﺗﻮاﺑﻊ ﻣﻲ ﺗﻮان اﺳﺘﻔﺎده ﻛﺮد ﺑـﺎ اﻳـﻦ ﺗﻔـﺎوت ﻛـﻪ ھﻨﮕـﺎم ﻛـﺎر ﺑـﺎ ﺗﻮاﺑـﻊ ﺣﺘـﻲ اﮔـﺮ آﻧﮫـﺎ ھـﯿﭻ آرﮔﻮﻣﺎن و ﻳﺎ ﭘﺎراﻣﺘﺮ ورودی ھﻢ ﻧﺪاﺷﺘﻪ ﺑﺎﺷﻨﺪ ذﻛﺮ ﭘﺮاﻧﺘﺰھﺎ اﻟﺰاﻣﻲ اﺳﺖ.
ﻣﺜﺎﻟﻲ دﻳﮕﺮ در اﻳﻦ زﻣﯿﻨﻪ :
ﻣﺜﺎل : ﻳﻚ ﺑﺮﻧﺎﻣـﻪ ی ﺳـﻲ ﺷـﺎرپ ﺟﺪﻳـﺪ console را در VS.NETﺑـﺎز ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا دراﺑﺘـﺪا ex۱۴ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ.
ﺳﭙﺲ از ﻣﻨﻮی ﭘﺮوژه ﻳﻚ ﻛﻼس ﺟﺪﻳﺪ را ﺑﻪ ﺑﺮﻧﺎﻣﻪ اﺿﺎﻓﻪ ﻧﻤﺎﻳﯿﺪ ( ﻧﺎم آﻧﺮا clsToolsﺑﮕﺬارﻳﺪ ) .
;using System
namespace ex۱۴
}
public class clsTools
}
()public clsTools
}
{
( public uint intCalc ( uint a , uint b
}
uint ;(c = Math.Min (a,b
; (double x = Math.Sqrt(c
uint ;(w = Convert.ToUInt۳۲ (x
;return w
{
{
{
ﺳﭙﺲ در ﻣﺘﺪ Main ﺑﺮﻧﺎﻣﻪ ﻣﻲ ﺗﻮان ﺑﻪ ﺻﻮرت زﻳﺮ از آن اﺳﺘﻔﺎده ﻛﺮد :
;using System
namespace ex۱۴
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;()clsTools m_var = new clsTools
;((۹,۴)Console.WriteLine( m_var.intCalc
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- ﺗﺎﺑﻊ intCalc ﻣﺎ دو ﻋﺪد ﺻﺤﯿﺢ ﻣﺜﺒﺖ را ﻣﻲ ﮔﯿﺮد و ﺳﭙﺲ ﺟﺬر ﻛﻮﭼﻜﺘﺮﻳﻦ دو ﻋﺪد ورودی را ﻣﺤﺎﺳـﺒﻪ ﻣـﻲ ﻛﻨﺪ.
٢- ﺑﺮای ﺗﺒﺪﻳﻞ ﻧﻮع ھﺎی ﻋﺪدی ﻣﺨﺘﻠﻒ ﺑﻪ ھﻢ ﻣﻲ ﺗﻮان از ﺷﻲء Convertاﺳﺘﻔﺎده ﻛﺮد.
٣- ﺑﺪون اﺳﺘﻔﺎده از ﺷﻲء Convertﻳﻜﺒﺎر ﺑﺮﻧﺎﻣﻪ را اﺟﺮا ﻛﻨﯿﺪ و دﻟﯿﻞ ﺧﻄﺎی ﺑﻮﺟﻮد آﻣﺪه را ﺑﯿﺎن ﻧﻤﺎﻳﯿﺪ.
منبع : برگرفته از سایتVcsharp.ir
نظرات شما عزیزان: